

export default `


program
      : statement_list              {tree = objs[0]}
		;

statement_list
      : statement_list statement                    {return new TreeNode ('STMT_LIST', 1,2)}
      |                                             {return new TreeNode ('EMPTY_STMT')}
      ;


statement
      :  符号                                        {return new TreeNode ('EMPTY_STMT)}
      | 名词A  符号                                  {return new TreeNode ('statement_名词A',1)}
      | 结构A  符号                                  {return new TreeNode ('statement_结构A',1)}
      | 动作A  符号                                  {return new TreeNode ('statement_动作A',1)}
      | error END_STMT                              {return new TreeNode ('ERROR_STMT')}
      ;
结构A
      : 动作A 名词A                                  {return new TreeNode ('动作结构',1,2)}
      |  动作A 动作                                  {return new TreeNode ('动作名词',1,2)}
      | 把 名词A 动作A                               {return new TreeNode ('把名词动作',2,3)}
      | 把 名词A 动作A 名词A                         {return new TreeNode ('把名词动作名词',2,3,4)}
      | 结构A 和 结构A                               {return new TreeNode ('和结构',1,3)} 
      

      ;
名词A
      : 名词                                        {return new TreeNode ('名词',1)}
      | 名词A 名词                                  {return new TreeNode ('多属性名词',1, 2)}
      | 名词A 的 名词A                              {return new TreeNode ('的名词',1, 3)}
      | 名词A 和 名词A                              {return new TreeNode ('和名词', 1,3)}       
      ;

      
动作A
      : 动作                                       {return new TreeNode ('动作',1)}
      | 动作A 和 动作                               {return new TreeNode ('和动作', 1,3)} 
      ;
`